<html>
 <head>
  <meta charset="UTF-8">
 </head>
 <body>
  <h1 data-lake-id="ZX34H" id="ZX34H"><span data-lake-id="ua5291bf0" id="ua5291bf0">典型回答</span></h1>
  <p data-lake-id="u46076d94" id="u46076d94"><br></p>
  <p data-lake-id="u5abbce7d" id="u5abbce7d"><span data-lake-id="u6d674513" id="u6d674513">实现"查找附近的人"功能，可以利用Redis的Geospatial数据类型，结合用户经纬度信息进行存储和查询。</span></p>
  <p data-lake-id="u5b7cf912" id="u5b7cf912"><span data-lake-id="u4e26229c" id="u4e26229c">​</span><br></p>
  <p data-lake-id="u2875064c" id="u2875064c"><span data-lake-id="u8a02c4cc" id="u8a02c4cc">​</span><br></p>
  <p data-lake-id="u7f9d0781" id="u7f9d0781"><span data-lake-id="u954cc14a" id="u954cc14a">使用Redis的GEOADD命令将用户经纬度信息存储在一个指定的键值中，然后再使用Redis的GEORADIUS命令可以查询指定经纬度附近一定范围内的用户信息就能简单实现这个功能了。</span></p>
  <p data-lake-id="ue86dd44b" id="ue86dd44b"><span data-lake-id="ud09ed561" id="ud09ed561">​</span><br></p>
  <pre lang="java"><code>
GEOADD user_location 121.57465 25.04100 user1

GEORADIUS user_location 121.57465 25.04100 1000 km
</code></pre>
  <p data-lake-id="u9de4e1e3" id="u9de4e1e3"><br></p>
  <p data-lake-id="ubd120880" id="ubd120880"><span data-lake-id="ua0b17fb3" id="ua0b17fb3">以上就是查询中国台湾附近1000km的人的两行命令。</span></p>
  <p data-lake-id="u77b1b9bc" id="u77b1b9bc"><span data-lake-id="u94ccb9f2" id="u94ccb9f2">​</span><br></p>
  <p data-lake-id="ud3ca94dd" id="ud3ca94dd"><span data-lake-id="u68203d43" id="u68203d43">代码实现：</span></p>
  <p data-lake-id="ua90408df" id="ua90408df"><span data-lake-id="u27b986cb" id="u27b986cb">​</span><br></p>
  <pre lang="java"><code>
import redis.clients.jedis.GeoRadiusResponse;
import redis.clients.jedis.Jedis;

import java.util.List;
import java.util.stream.Collectors;

public class RedisGeoDemo {

    private static final String USER_LOCATION_KEY = "user_location";

    // 存储用户经纬度信息
    public static void saveUserLocation(String userId, double longitude, double latitude, Jedis jedis) {
        jedis.geoadd(USER_LOCATION_KEY, longitude, latitude, userId);
    }

    // 查询附近的人
    public static List&lt;String&gt; getNearbyUsers(double longitude, double latitude, double radius, Jedis jedis) {
        List&lt;GeoRadiusResponse&gt; responses = jedis.georadius(USER_LOCATION_KEY, longitude, latitude, radius, "km");
        return responses.stream().map(GeoRadiusResponse::getMemberByString).collect(Collectors.toList());
    }
}

</code></pre>
 </body>
</html>